package com.yungu.swift.lbs.service;

import com.yungu.swift.base.ResponseData;
import com.yungu.swift.lbs.model.param.TraceCheckParam;
import com.yungu.swift.lbs.model.param.TrsearchParam;
import com.yungu.swift.lbs.model.vo.DistanceVo;
import com.yungu.swift.lbs.model.vo.DrivingNearestVo;
import com.yungu.swift.lbs.model.vo.TrackVo;

import java.util.List;
import java.util.Map;

/**
 * @author : cuixiuyin
 * @date : 2019/4/9
 */
public interface DistanceService {

    /**
     * 获取默认配置参数的距离 - 百度计算里程
     *
     * @see #gaodeTraceCheck(String, String, TrsearchParam)
     */
    @Deprecated
    ResponseData<Double> distanceForBaiduTrace(String entityName, long startTime, long endTime);


    /**
     * 百度里程纠偏
     *
     * @param list
     * @see #gaodeTraceCheck(String, String, TrsearchParam)
     */
    @Deprecated
    ResponseData<Map<String, Object>> baiduTraceCheck(List<TraceCheckParam> list);

    /**
     * 高德 - 根据起点终点经纬度获取速度最快规划路径信息
     *
     * @param originLng
     * @param originLat
     * @param areaLng
     * @param areaLat
     * @return
     */
    ResponseData<DrivingNearestVo> getDrivingNearest(String originLng, String originLat, String areaLng, String areaLat);


    /**
     * 高德 — 里程纠偏并计算里程
     *
     * @param trsearchParam
     * @return
     */
    ResponseData<List<TrackVo>> gaodeTraceCheck(String driverUuid, String orderUuid, TrsearchParam trsearchParam);


    /**
     * 通过两点坐标计算距离（单位：米）—— 直线距离
     *
     * @param lng1
     * @param lat1
     * @param lng2
     * @param lat2
     * @return
     */
    ResponseData<Double> getDistance(Double lng1, Double lat1, Double lng2, Double lat2);

    /**
     * 通过两点坐标计算距离（单位：米） —— 高德地图
     *
     * @param origins     坐标对见用 “|”分隔；经度和纬度用","分隔。出发点支持100个坐标对
     * @param destination 目的规则： lon，lat（经度，纬度）， “,”分割 如117.500244, 40.417801 经纬度小数点不超过6位
     * @return
     */
    ResponseData<List<DistanceVo>> getDistance(String origins, String destination);

    /**
     * 单起点与多终点两两距离 —— 高德地图
     *
     * @param originLngLat
     * @param destLngLatList
     * @return
     */
    ResponseData<List<Double>> getBatchDistance(String originLngLat, List<String> destLngLatList);


}
